home *** CD-ROM | disk | FTP | other *** search
- /* Rotates and moves a polygon-based object around the three axes.
- Movement is implemented only along the Z axis currently. */
- #include "polygon.h"
-
- void RotateAndMovePObject(PObject * ObjectToMove)
- {
- if (--ObjectToMove->RDelayCount == 0) { /* rotate */
- ObjectToMove->RDelayCount = ObjectToMove->RDelayCountBase;
- if (ObjectToMove->Rotate.RotateX != 0.0)
- AppendRotationX(ObjectToMove->XformToWorld,
- ObjectToMove->Rotate.RotateX);
- if (ObjectToMove->Rotate.RotateY != 0.0)
- AppendRotationY(ObjectToMove->XformToWorld,
- ObjectToMove->Rotate.RotateY);
- if (ObjectToMove->Rotate.RotateZ != 0.0)
- AppendRotationZ(ObjectToMove->XformToWorld,
- ObjectToMove->Rotate.RotateZ);
- ObjectToMove->RecalcXform = 1;
- }
- /* Move in Z, checking for bouncing */
- if (--ObjectToMove->MDelayCount == 0) {
- ObjectToMove->MDelayCount = ObjectToMove->MDelayCountBase;
- ObjectToMove->XformToWorld[2][3] += ObjectToMove->Move.MoveZ;
- if ((ObjectToMove->XformToWorld[2][3] >
- ObjectToMove->Move.MaxZ) ||
- (ObjectToMove->XformToWorld[2][3] <
- ObjectToMove->Move.MinZ) ) {
- ObjectToMove->Move.MoveZ = -ObjectToMove->Move.MoveZ;
- }
- ObjectToMove->RecalcXform = 1;
- }
- }